const { app, BrowserWindow } = require('electron') // CommonJS 语法导入了两个 Electron 模块
const path = require('node:path')
const { globalShortcutFun } = require('./electron/base/globalShortcut')
// const { browserMenuFun } = require('./electron/base/browserMenu')

console.log(app, 'app')

const createWindow = () => {
    const win = new BrowserWindow({
        width: 1200,
        height: 800,
        webPreferences: {
            contextIsolation: false,
            worldSafeExecuteJavaScript: false,
            webSecurity: false,
            nodeIntegration: true, // 是否集成 node.js，解决 require is not defined 问题
            nodeIntegrationInWorker: true,
            webviewTag: true, // 解决 webview 无法显示问题
            preload: path.join(__dirname, 'electron/preload.js')
            // contextIsolation: false, // 上下文隔离，推荐开启
            // nodeIntegration: true, // node.js 集成开启，推荐禁用
            // nodeIntegrationInWorker: true, // node.js 集成
            // webSecurity: true, // 强烈建议强制开启，因为禁用 webSecurity 将会禁止同源策略并且将 allowRunningInsecureContent 属性置 true。 换句话说，这将使得来自其他站点的非安全代码被执行。
            // allowRunningInsecureContent: true, // 允许网站在HTTPS中加载或执行非安全源(HTTP) 中的脚本代码、CSS或插件，Electron 默认是禁止这种执行，建议不要开启。
            // experimentalFeatures: true, // Electron 的熟练用户可以通过 experimentalFeatures 属性来启用 Chromium 实验性功能。Electron 不推荐开启，除非你知道你自己在干什么，否则你不应该开启这个属性。
            // experimentalFeatures: false // 实验性功能，默认关闭。Electron 的熟练用户可以通过 experimentalFeatures 属性来启用 Chromium 实验性功能。
            // enableRemoteModule: true, // 是否允许远程模块 remote，即在渲染进程中使用 remote 进行跨进程访问主进程，默认为 false。此为 14.0.0 以下版本使用，之后版本使用的声明见mian.js的remote的使用。
        }
    })
    // 当前窗口加载的本地页面
    win.loadFile('view/index.html')
    // 当前窗口加载的网上页面
    // win.loadURL('https://www.baidu.com')
    // 开启当前窗口的开发者工具
    win.webContents.openDevTools()
    // __dirname 字符串指向当前正在执行脚本的路径 (在本例中，它指向你的项目的根文件夹)。
    // path.join API 将多个路径联结在一起，创建一个跨平台的路径字符串。

    
    // remote 模块远程使用（即渲染进程中使用），需在主进程中设置
    require('@electron/remote/main').initialize()
    require('@electron/remote/main').enable(win.webContents)

    // 全局快捷键模块
    globalShortcutFun()

    // 浏览器菜单模块
    // browserMenuFun()
}

app.whenReady().then(() => {
    createWindow()
    // macos(darwin)系统关闭全部窗口后新建窗口 ？
    app.on('activate', () => {
      if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
})

// windows、linux系统关闭全部窗口后退出应用
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
  })
